/*
 * 校验邮箱的格式以及判断是否存在白名单中
 * emails: 邮箱（以英文逗号分割）
 * isCheckWhiteList: 是否启用白名单校验
 * emailWhiteList: 用于校验的邮箱白名单
 * 白名单控制
*/
export function checkEmail(emails, isCheckWhiteList, emailWhiteList = []) {
  // 正则表达式校验
  var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
  var emailList = emails.split(',')
  // 校验白名单的index
  if (isCheckWhiteList) {
  // 如果有白名单,会依照白名单进行判断
    for (let i = 0; i < emailList.length; i++) {
      if (pattern.test(emailList[i])) {
      // 通过校验后判断域名是否存在于白名单
        var domain = emailList[i].substring(emailList[i].indexOf('@'))
        var index = 0
        for (index = 0; index < emailWhiteList.length; index++) {
          // 如果存在于白名单(忽略大小写)，则校验通过。
          if (domain.toLowerCase() === emailWhiteList[index].toLowerCase()) {
            break
          }
        }
        // 如果index等于白名单大小，代表全部判断完毕也未找到对应的白名单域名
        if (index === emailWhiteList.length) {
          return false
        }
      } else {
        return false
      }
    }
  } else {
    // 如果白名单为空，则不会依照白名单进行判断
    for (let i = 0; i < emailList.length; i++) {
      if (!pattern.test(emailList[i])) {
        return false
      }
    }
  }
  return true
}

// 邮箱去重
export function removeRepeatEmails(emails) {
  var uniqueEmailList = unique(emails.split(';'))
  return uniqueEmailList.join(';')
}

// 字符串数组去重
export function unique(arr) {
  return arr.filter(function(item, index, arr) {
    return arr.indexOf(item, 0) === index
  })
}
